package test.demo;

/***
 ** @category 单例模式-饿汉式（静态代码块）
 ** @author qing.yunhui
 ** @email: qingyh@glodon.com
 ** @createTime: 2021-12-30 16:01
 **/
public class SingletonTest02 {
    public static void main(String[] args) {
        Singleton02 instance = Singleton02.getInstance();
        Singleton02 instance2 = Singleton02.getInstance();
        System.out.println(instance == instance2); // true
        System.out.println("instance.hashCode=" + instance.hashCode());
        System.out.println("instance2.hashCode=" + instance2.hashCode());
        /*
             优缺点说明：
            1) 这种方式和上面的方式其实类似，只不过将类实例化的过程放在了静态代码块中，也是在类装载的时候，就执
            行静态代码块中的代码，初始化类的实例。优缺点和上面是一样的。
            2) 结论：这种单例模式可用，但是可能造成内存浪费
        */
    }
}
//饿汉式(静态变量)
class Singleton02 {
    //1. 构造器私有化, 外部能 new
    private Singleton02() { }
    //本类内部创建对象实例
    private static Singleton02 instance;
    static { // 在静态代码块中，创建单例对象
        instance = new Singleton02();
    }
    //3. 提供一个公有的静态方法，返回实例对象
    public static Singleton02 getInstance() {
        return instance;
    }
}
